<?php

namespace app\admin\model;

use think\Model;

/**
 * Appointment
 */
class Appointment extends Model
{
    // 表名
    protected $name = 'appointment';

    // 自动写入时间戳字段
    protected $autoWriteTimestamp = false;

    protected $append = ['appointment_date'];

    //前端显示的日期部分
    public function getAppointmentDateAttr($value, $data)
    {
        //如果是添加或编辑,返回前端的传入的日期部分
        if (isset($data['appointment_date'])) {
            return $data['appointment_date'];
        }
        //列表页展示数据
        if (isset($data['start_time'])) {
            return date('Y-m-d', strtotime($data['start_time']));
        }
        return '';
    }

    // public function getStartTimeAttr($value): ?string
    // {
    //     return $value ? date('H:i', strtotime($value)) : $value;
    // }


    // public function getEndTimeAttr($value): ?string
    // {
    //     return $value ? date('H:i', strtotime($value)) : $value;
    // }

    public function room(): \think\model\relation\BelongsTo
    {
        return $this->belongsTo(\app\admin\model\Room::class, 'room_id', 'id');
    }

    public function medicalStaff(): \think\model\relation\BelongsTo
    {
        return $this->belongsTo(\app\admin\model\MedicalStaff::class, 'medical_staff_id', 'id');
    }

    public function operator(): \think\model\relation\BelongsTo
    {
        return $this->belongsTo(\app\admin\model\Admin::class, 'admin_id', 'id');
    }

    /**
     * 关联门店
     */
    public function store(): \think\model\relation\BelongsTo
    {
        return $this->belongsTo(Store::class, 'store_id', 'id');
    }

    /**
     * 关联养生项目（多对多）
     */
    public function healthItems(): \think\model\relation\BelongsToMany
    {
        return $this->belongsToMany(HealthItems::class, 'appointment_health_items_relation', 'health_item_id', 'appointment_id');
    }

    /**
     * 获取关联的项目ID数组
     */
    public function getHealthItemIdsAttr($value, $data)
    {
        if (isset($this->healthItems)) {
            return $this->healthItems->column('id');
        }
        return [];
    }

    /**
     * 获取项目总时长
     */
    public function getTotalDurationAttr($value, $data)
    {
        if (isset($this->healthItems)) {
            return $this->healthItems->sum('duration');
        }
        return 0;
    }

    // 注释掉模型事件，改为在控制器中直接处理
    // /**
    //  * 模型事件 - 新增后处理项目关联
    //  */
    // public static function onAfterInsert($model)
    // {
    //     self::handleHealthItemsRelation($model);
    // }

    // /**
    //  * 模型事件 - 更新后处理项目关联
    //  */
    // public static function onAfterUpdate($model)
    // {
    //     self::handleHealthItemsRelation($model);
    // }

    // /**
    //  * 处理养生项目关联
    //  */
    // private static function handleHealthItemsRelation($model)
    // {
    //     if (isset($model->_health_item_ids) && is_array($model->_health_item_ids)) {
    //         // 先删除旧的关联
    //         \think\facade\Db::name('appointment_health_items_relation')
    //             ->where('appointment_id', $model->id)
    //             ->delete();
            
    //         // 添加新的关联
    //         $relationData = [];
    //         foreach ($model->_health_item_ids as $index => $healthItemId) {
    //             $relationData[] = [
    //                 'appointment_id' => $model->id,
    //                 'health_item_id' => $healthItemId,
    //             ];
    //         }
            
    //         if (!empty($relationData)) {
    //             \think\facade\Db::name('appointment_health_items_relation')
    //                 ->insertAll($relationData);
    //         }
    //     }
    // }
}
